In der Version 6.53 existiert ein Designfehler im cxGrid, wenn in der Event OnBeforePost eine Messagebox aufgerufen wird
procedure TForm1.dxMemData1BeforePost(DataSet: TDataSet);
begin
if MessageDlg('save record?', mtConfirmation,mbYesNo,0) <> mrYes then
Abort;
end;
Der Dialog sollte eigentlich so aussehen:

Durch den Fehler sieht es aber so aus:

Als Workaround wurde mir von DevExpress folgendes empfohlen:
procedure TForm1.dxMemData1BeforePost(DataSet: TDataSet);
begin
cxGrid1.Perform(WM_SETREDRAW, Integer(false), 0);
try
if MessageDlg('save record?', mtConfirmation, mbYesNo, 0) <> mrYes then
Abort;
finally
cxGrid1.Perform(WM_SETREDRAW, Integer(true), 0);
end;
end;
Tags: Delphi Delphi 2009 DevGrid
Download einer Datei mit der TDownLoadURL - Action. Da diese Komponente DLL's des IE nutzt, braucht der Entwickler keine weiteren Einstellungen (Proxy ...) vorsehen.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls,
ExtActns;
type
TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
procedure Progress(Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: string; var Cancel: Boolean);
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with TDownLoadURL.Create(nil) do
try
URL := 'http://../test.txt'; // URL der Datei
Filename := '...\test.txt'; // Name der Datei
OnDownloadProgress := Progress; // Status des Downloads anzeigen
Execute;
finally
Free;
end;
end;
procedure TForm1.Progress(Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus;
StatusText: string; var Cancel: Boolean);
begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
Caption:=StatusText;
end;
end.
Tags: Delphi Delphi 2009
DelForExp ist ein altes Opensource-Tool zur Formatierung von Delphi-Quellcode aus der IDE heraus. Es wurde von mir nur für Delphi 2009 und Windows Vista/7 angepasst.
Tags: Programme Freeware Delphi 2009
unit MerkRecord;
interface
uses Classes,Variants;
type
// Dieser Rekord soll in der Liste enthalten sein
TMerkRecord = Record
I :integer;
s :string;
v : Variant;
a :array of char;
End;
// die eigentliche Liste
TMerkList = class(TList)
private
function GetItems(index: integer): TMerkRecord;
protected
// Freigabe des Speichers
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
public
// Zugriff auf den Rekord
property Items[index :integer] :TMerkRecord read GetItems; default;
// Neuen Record hinzufügen
function Add(R :TMerkRecord) :integer;
end;
implementation
type
PMerkRecord = ^TMerkrecord;
{ TMerkList }
function TMerkList.Add(R: TMerkRecord): integer;
var
P :PMerkRecord;
begin
P:= new(PMerkRecord);
P^:=R;
Result:=inherited Add(P);
end;
function TMerkList.GetItems(index: integer): TMerkRecord;
begin
Result:=PMerkRecord(inherited Items[Index])^;
end;
{Strings und dynamische Arrays müssen auf die Länge von 0 gesetzt werden.
Da Variants alle Typen enthalten können, müssen sie auf NULL gesetzt werden}
procedure TMerkList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if Action=lnDeleted then begin
PMerkRecord(Ptr).s:='';
PMerkRecord(Ptr).V:=Null;
SetLength(PMerkRecord(Ptr).a,0);
Dispose(Ptr);
end;
inherited;
end;
end.
Tags: Delphi Delphi 2009
Beim Filtern einer Column mit Datumswerten sollen nur die Jahre angezeigt werden

Dadurch ist auch eine Mehrfachauswahl möglich. dafür sind 2 Schritte notwendig: Es müssen die Events OnGetFilterValues und OnInitFilteringDateRanges genutzt werden
procedure THWFilter.OnInitFilteringDateRanges(Sender: TcxCustomGridTableItem; ADateRanges: TcxGridDateRanges);
begin
ADateRanges.Add(TcxGridYearRange); // nach Jahren filtern
end;
procedure THWFilter.OnGetFilterValues(Sender: TcxCustomGridTableItem; AValueList: TcxDataFilterValueList);
var
z: integer;
begin
// löschen der einzelnen Tage
for z := AValueList.Count - 1 downto 0 do
if AValueList[z].Kind = fviValue then
AValueList.Delete(z);
end;
Tags: Delphi Delphi 2009 DevGrid
Nach der Benutzung der Hilfe von Delphi 2009 lässt sich Windows XP nicht mehr beenden. Schuld daran ist der Prozess
dexplorer (Windows Hilfe)
Wenn dieser beendet wird, kann Windows wieder richtig beendet werden.
Tags: Windows Delphi Delphi 2009